home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 13 / Mac Magazin and MacEasy Magazine CD - Issue 13.iso / Wissenschaft & Technik / ResAnomaly dist / SpinCursorsLib / SpinCursorLib.cp < prev    next >
Text File  |  1995-08-04  |  1KB  |  75 lines

  1. /*
  2.     File:        SpinCursorLib.cp
  3.     
  4.     Contains:    Cursor spinning routines.
  5.  
  6.     Copyright:    ©1995 Chris K. Thomas.  All Rights Reserved.
  7.     
  8.     Version:    1.0
  9.     
  10.     History:    ckt August 2, 1995 created.
  11. */
  12.  
  13. #ifdef __powerc
  14. #pragma traceback on
  15. #endif
  16. #include "SpinCursorLib.h"
  17.  
  18. CursorSet::CursorSet(const short inStartID, const short inNumCursors)
  19. :mYCursors(sizeof(CursHandle))
  20. {
  21.     mCursorIterator = 1;
  22.     mCurrentCursor = NULL;
  23.     
  24.     // * grab cursors
  25.     CursHandle    ourCursor;
  26.     
  27.     for(short i = inStartID; i <= (inStartID + inNumCursors - 1); i++)
  28.     {
  29.         ourCursor = (CursHandle)GetResource('CURS', i);
  30.         ThrowIfNULL_(ourCursor);
  31.         
  32.         mYCursors.InsertItemsAt(1, 1, &ourCursor);
  33.     }
  34.     
  35.     mLastTicks = TickCount();
  36. }
  37.  
  38. CursorSet::~CursorSet()
  39. {
  40.     InitCursor();
  41.     
  42.     CursHandle    ourCurs;
  43.     
  44.     while(mYCursors.GetCount() > 0)
  45.     {
  46.         if(mYCursors.FetchItemAt(1, &ourCurs))
  47.         {
  48.             ReleaseResource((Handle)ourCurs);
  49.         }
  50.         mYCursors.RemoveItemsAt(1, 1);
  51.     }
  52. }
  53.  
  54.  
  55. // * rotate the cursor
  56. void CursorSet::Spin()
  57. {
  58.     if((TickCount() - mLastTicks) > kMinSpinTicks)    // * prevent cursor flash
  59.     {
  60.         if(mCurrentCursor)
  61.             HUnlock((Handle)mCurrentCursor);
  62.             
  63.         if(mCursorIterator++ > mYCursors.GetCount())
  64.             mCursorIterator = 1;
  65.         
  66.         if(mYCursors.FetchItemAt(mCursorIterator, &mCurrentCursor))
  67.         {
  68.             HLockHi((Handle)mCurrentCursor);
  69.             
  70.             SetCursor(*mCurrentCursor);
  71.         }
  72.         
  73.         mLastTicks = TickCount();
  74.     }
  75. }